package com.flowerSystem.interceptor;

import com.alibaba.fastjson.JSON;
import com.flowerSystem.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Objects;

/**
 * token拦截器
 */
@Slf4j
public class TokenInterceptor  implements HandlerInterceptor {
    @Resource
    private RedisTemplate redisTemplate;

    public TokenInterceptor(RedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if ("OPTIONS".equals(request.getMethod())) {
            return true;
        }
        //登录放行
        String path = request.getServletPath();
//        if (path.indexOf("/login")>0){
//            return true;
//        }
//        if (path.indexOf("/reg")>0){
//            return true;
//        }
//        if (path.indexOf("/carmanage")>0){
//            return true;
//        }
//        if (path.indexOf("/cartype")>0){
//            return true;
//        }
//        if (path.indexOf("/admin")>0) {
//            return true;
//        }
        if (path.indexOf("/**")>0){
            return true;
        }

//        //添加照片放行
        if (path.indexOf("/upload")>0){
            return true;
        }
        if (path.indexOf("/download")>0){
            return true;
        }
        // 请求头中必须携带token，不然会访问不到
        String token = request.getHeader("token");

        if (token == null || "" == token){
            throw  new NoLoginException(0,"请登录！");
        }
        // token 一定要在有效期内
        // 登录接口不能使用这个鉴权，不然怎么也登不上，没token
        Object o = redisTemplate.opsForValue().get(token);
        log.info("token-》{}",token);
        if (o == null ){
            throw  new NoLoginException(0,"用户信息已过期，请重新登录！");
        }
        // 拿出redis存放的信息 做判斷
        User admin = JSON.parseObject(JSON.toJSONString(o), User.class);
//        if (!Objects.equals(admin.getIsDelete(),0)){
//            throw  new RuntimeException("该用户不存在！");
//        }
        //数据库查询当前用户，如果不存在，就返回该用户不存在

        return HandlerInterceptor.super.preHandle(request, response, handler);
    }
}
